
package redeS.mensagem.requisicao;

import redeS.mensagem.*;

/**
 * Classe que representa uma requisição de um Push.
 * @see Request
 * @author thiago-pc
 */
public class PushRequest extends Request {
	
	private int indexOfNode;
	
	public PushRequest(QueryHit qhit){
		super(qhit);
		indexOfNode = qhit.getIndexOfNode();
	}
	
	/**
	 * Índice do nó que respondeu a requisição, ou seja, o índice desse nó!</br>
	 * (é necessário porque o índice do push tem que ser o mesmo)
	 */
	public int getIndexOfNode(){
		return indexOfNode;
	}

	/**
	 * Método sobrecarregado. Veja {@link Request#isAnswer(GnutellaMessage)}.
	 */
	@Override
	public boolean isAnswer(GnutellaMessage message) {
		if(message instanceof Push){
			// O Push tem o mesmo ID do QueryHit recebido (que por conseguinte é
			// o mesmo ID do Query). Quem tem uma PushRequest (eviou o QueryHit e
			// tem firewall) espera um Push com o mesmo ID (especifica o arquivo)
			// e o mesmo indexOfNode (especifica o receptor).
			if(((Push)message).getIndexOfNode() == indexOfNode &&
					ID == message.getDescriptorID()){
				return true;
			}
		}
		return false;
	}
}
